تقنية

شرح طريقة عمل بروتوكول HTTP

خلفية بسيطة :

عند تصفح الويب فان الموقف كالتالي: تجلس على حاسبوك وتريد عرض مستند في مكان ما في الويب عن طريق URL الخاص به. بما ان المستند في مكان ما على الشبكة وربما بعيد جدا عنك فتحتاج الى تفاصيل اكثر لجعل المستند متوفر لك . اول هذه التفاصل هو مستعرض الانترنت الخاص بك . انت تقوم بفتح المستعرض وتبدا كتابة URL (على الاقل يجب ان تخبر المستعرض اين ستذهب , ربما عن طريق الضغط على رابط)

مع ذلك . الصورة غير واضحة , مستعرضك لا يستطيع عرض المستند عن طريق URL الخاص به فقط . من اجل ان تستطيع الوصول الى المستند يجب ان يكون المستند موجود على خادم ويب . خادم الويب هو حاسوب يقوم بالانصات الى الطلبات من المستعرضات ومن ثم تنفيذها .

ماذا بعد هذا ؟ مستعرضك يتصل بالخادم ويطلب المستند يقوم الخادم بتنفيذ الطلب وايصال المستند الى المستعرض(الرد على الطلب ) , يقوم المستعرض بعرضة للمستخدم . الخادم ايضا يخبر مانوع المستند المطلوب (PDF,HTML,ZIP… الخ ) .

مستندات HTML تعرض من المستعرض مباشرة . في حالة وجود صور او اصوات او برمجيات Java في المستند المستعرض سيطلبها من خوادمها الموجودة عليه (غالبا نفس الخادم لكن ليس دائما ) هذه طلبات منفصلة عن بعض , عندما يتبع المستخدم رابط آخر العملية تبدا من جديد .

هذه الطلبات والردود تعمل في لغة خاصة تدعى HTTP . ماتفعله هذه المقالة هو وصف هذه اللغة فقط , يوجد بروتوكولات مشهورة اخرى مثل FTP و Gopher تعمل بطريقة مشابهة للـ HTTP , يوجد ايضا بروتوكولات اخرى ولكنها تعمل بطرق مختلفة تماما . لاحظ ان HTTP يعرف مايقوله المستعرض والخادم لبعض ولكن لا يعرف كيف يتصلان ببعض , الاتصال الحقيقي (ارسال واستقبال البتات عبر الشبكة ) يتم عن طريق TCP/IP. لاحظ ايضا ان اي برنامج يقوم بعمل المستعرض (استدعاء ملف من الخادم ) يسمى عميل

# ماذا يحدث عندما اتبع رابط ؟

1 – تحليل الـ URL :
اول عمل يتم القيام به هو البحث عن URL للحصول عليه . اغلب الURL تمتلك هيئة اساسية

[quote] protocol://server/request-URL [/quote]

جزء البروتوكول يمثل طريقة الاتصال بالخادم وطريقة استدعاء المستندات منه , جزء الخادم يخبر المستعرض بالخادم المطلوب , الجزء الاخير يستخدم من قبل الخادم لمعرفة المستند المطلوب (اسم المستند)

2 – ارسال الطلب  :
عادة للحصول على مستند عبر بروتوكول http المستعرض يرسل طلب مثل هذا

[quote] GET /المستند المطلوب HTTP/version  [/quote]

الجزء الاخير من هذا الطلب (version) تخبر الخادم اي نسخة من نسخ HTTP هي المستخدمة.
النقطة المهمة هنا ان الخادم لا يهتم ان كان مستعرضك من قام بالطلب او كان محرك بحث او حتى ان كتبته انت يدويا , هو فقط ينفذ الطلب ويرسل نتيجة الطلب

3 – رد الخادم :
عندما يقوم الخادم باستقبال طلب http يقوم بايجاد (في حالة وجد) الملف المناسب وارجاعة . رد http يمتلك شكل مثل التالي

[quote]HTTP/[VER] [CODE] [TEXT] Field1: Value1
Field2: Value2
… محتوى المستند هنا …  [/quote]

اول سطر يظهر نسخة http المستخدمة متبوعة برقم من ثلاث خانات (رقم الحالة لـhttp) وعبارة مقروءة للبشر . عادة الرقم 200 و العبارة OK ( تشير الى ان كل شي جرى على مايرام ) الاسطر التالية لشي يسمى header انه يحتوي على بعض المعلومات الخاصة بالمستند . الـ header ينتهي بسطر فارغ متبوعا بمحتوى المستند . مثال على header

[quote]HTTP/1.0 200 OK
Server: Netscape-Communications/1.1
Date: Tuesday, 25-Nov-97 01:22:04 GMT
Last-modified: Thursday, 20-Nov-97 10:44:53 GMT
Content-length: 6372
Content-type: text/html

<!DOCTYPE HTML PUBLIC “-//W3C//DTD HTML 3.2 Final//EN”>
<HTML>
…متبوعا بمحتوى المستند …  [/quote]

نلاحظ من السطر الاول ان الطلب كان ناجحا . السطر الثاني سطر اخياري يقوم باخبرانا ان الخادم يعمل على Netscape Communications . السطر الثالث يظهر التوقيت بالنسبة للخادم واخر تعديل تم على المستند . السطر الذي يليه يخبرنا عن حجم المستند في البايت . آخر سطر وهو الاهم “نوع المتحوى”. حيث يستخدم من قبل المستعرض لمعرفة صيغة المستند. HTML معرفة بـ “text/html”, النصوص العادية معرفة بـ “text/plain”, الصور بـ “image/gif” .
هنالك مفهوم مهم وهو : بالنسبة للمستعرض , الخادم يعمل مثل الصندوق الاسود , المستعرض يطلب مستند معين والمستند اما يرجع (يرد) واما رسالة خطا ترجع , كيف ينتج الخادم الملف تبقى غير معروفة للمستعرض (هل هو يقراها من ملف داخلي , ام ينتجها من احد البرامج )
هذا المفهوم يعطي مدير الخادم الحرية لتجربة انواع من الخدمات من دون اهتمام (او حتى معرفة ) المستخدمين لكيفية انتاج هذه الصفحات.

# نسخ HTTP :
حتى الان هنالك ثلاث نسخ من HTTP . الاولى كانت HTTP/0.9 وتم تصحيحها بـ HTTP/1.0 حيث هي النسخة المتداولة حاليا . يوجد ايضا HTTP/1.1 والتي هي امتداد للاخيرة (في هذا الشرح تم استخدام HTTP/1.0)

http2

# الطلب المرسل من العميل :

شكل الطلب  .. جميع الطلبات تشبه هذا الشكل

[quote][METH] [REQUEST-URI] HTTP/[VER] [fieldname1]: [field-value1] [fieldname2]: [field-value2] [request body, if any]  [/quote]

METH نوع الطلب المستخدم , REQUEST-URI هي معرف المستند على الخادم , VER هي نسخة HTTP, حقول HEADER موجودة ايضا كما في الرد من الخادم . السطر الاخير

[quote] [request body, if any]  [/quote]

يستخدم في حالة الطلبات التي تحتاج الى ارسال بيانات مثل POST و PUT .

# الحصول على المستند :
هنالك عدة انواع من الطلبات اكثرها شهرة هو GET . GET ببساطة تعني “ارسلي هذا المستند ” على الشكل “GET xxxxx HTTP/version” كما هو مشروح بالاعلى (حيث xxxxx مسار المستند )
بالرغم من ان السطر اعلاه هو اهم سطر الا ان user agent ( برنامج يعمل بالنيابة عن المستخدم , في هذه الحالة هو المستعرض ) يمكن ان يرسل اكثر من حقل header في الطلب لتزويد الخادم بمعلومات اضافية
بعض حقول header التي يمكن استخدامها مع GET :
User-Agent لاخبار الخادم نوع المتصفح .
Referer اخبار الخادم من اين جئت .
Authorization يمكن ان يحمل اسم مستخدم وكلمة مرور اذا كان المستند يطلب ذلك .
نوع الطلب الاخر HEAD
يعمل على عرض header المستند بدون تحميل كافة المستند

# معاني ارقام الحالات :
1xx معرفة ومحجوزة للاغراض التجريبية
2xx الطلب تم بنجاح
3xx تحويل (المصدر موجود لكن في مكان اخر )
4xx خطا من العميل (اكثر خطا مشهور هو 404 )
5xx خطا من الخادم

الان حان الوقت لتطبيق بعض الذي تعلمتة افتح هذا الموقع : http://www.hurl.it/

Ahmed Alhawary

مدون حر أهتم بالأخبار التقنية عامة والمقالات الموجهة للمختصين في عالم تكنولوجيا المعلومات خاصة

مقالات ذات صلة

زر الذهاب إلى الأعلى